Add pair programming plugin - #43
Merged
Merged
Conversation
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.
Tip: disable this comment in your organization's Code Review settings.
hal-eisen-adfa
requested changes
Jul 9, 2026
hal-eisen-adfa
left a comment
Contributor
There was a problem hiding this comment.
Code On The Go plugin review — pair
Ran the /plugin-review workflow (build + security audit + submission rubric). Great engineering underneath — clean lifecycle teardown, canonicalized path handling, an authenticated LAN transport, and thorough docs — but there are submission-conformance blockers. Details inline; summary here.
🔴 Blockers
- Build fails from a clean checkout.
./gradlew assemblePluginfails at:compileReleaseKotlin:libs/shared.jardoesn't exist, and behind it the code callsIdeEditorService.showPeerCursor/hidePeerCursor/clearPeerCursorsandIdeProjectService.openProject(File), which aren't in the committedplugin-api.jar. The README/HTML confirm these live on the unmergedfeat/ADFA-4419branch. The plugin can't build against the repo'sstage-trackedlibs/as submitted — this is the primary blocker. native.codepermission with no native code. No.so/jniLibs/NDK C++ (and no QR/camera library is even declared), yetplugin.permissionsrequestsnative.code.- No in-app help. No class implements
DocumentationExtension— no Tier 1/2 tooltip entries, no Tier-3 offlineassets/help page, and the sidebar item has notooltipTag. - Missing
plugin.editor_tabsmanifest entry for the contributed editor tab.
🟡 Conditional
- Add
plugin.max_ide_versionfor a real compatibility range (onlyminis declared).
✅ Clean
- Security: path traversal is defended (
PathMapper.toLocalCheckedcanonicalizes + enforces the root boundary), the WebSocket server enforces a join token, no reflection, no committed secrets/keystores. - Resource discipline (6.2): the coroutine scope is cancelled in
dispose(), sockets are closed onstopSession(), streams use.use{}, andPairServiceLocator.shutdown()nulls thePluginContextholder. - HTML documentation (6.6): all required sections, light bg / dark text, English, top-level.
Rubric scorecard
| Clause | Verdict |
|---|---|
| 6.1 Compatibility | Partial (no max_ide_version) |
| 6.2 Resource discipline | Pass |
| 6.3 Build reproducibility | Fail (build fails) |
| 6.4 Native binaries | Fail (native.code unused) |
| 6.5 No reflection | Pass |
| 6.6 HTML documentation | Pass |
| 6.7 Tooltips & in-app help | Fail (no DocumentationExtension) |
| Manifest declarations | Fail (no plugin.editor_tabs) |
Overall: BLOCK. Note: no device verification was possible — the build never produced a .cgp.
pair depends on com.itsaky.androidide.models.Range (shared.jar), which was referenced from the common libs/ but never committed, so a clean checkout could not build. Ship the jar plugin-locally under pair/libs/ instead of the stage-tracked common libs/. Also drops the ndk abiFilters block: the plugin has no native code. Jar built from CodeOnTheGo :shared:jar.
- Drop the unused native.code permission (no native code ships in the plugin) - Declare plugin.editor_tabs for the contributed Pair editor tab - Pin the supported IDE range: min_ide_version = max_ide_version = 26.32, the release that ships the peer-cursor/openProject plugin API - Implement DocumentationExtension: tooltip entry on the sidebar item (tag pair.sidebar) with summary, detail, and a User guide button, plus a Tier-3 offline guide at assets/docs/index.html
# Conflicts: # README.md
hal-eisen-adfa
approved these changes
Aug 11, 2026
…rom M3 Typography Typography built from PluginTextStyles carried explicit colors (labelLarge had onSurface baked in), which override Material3 per-slot content colors — filled buttons rendered onSurface (black in light mode) instead of onPrimary. Typography is now colorless and PairContent's root Box is a Surface so LocalContentColor provides onSurface to plain text. Verified on emulator in light and dark mode.
…ntrol PairTooltips registers one entry per control (16 total) under the plugin category; the longPressTooltip modifier intercepts long-press in the initial pointer pass, shows the tooltip via IdeTooltipService with the 3-arg overload, and consumes the rest of the gesture so the underlying control does not also fire onClick. Verified on emulator: tooltips render with See more, taps and text input unaffected.
Rounded teal tile matching the other plugins' card style: big < > centered with a small WiFi fan at the top right. Day tile is deep teal with a white glyph, night tile is bright teal with a dark glyph. Sidebar and tab keep the existing people glyph.
plugin.name, app label, and the user guide now say Code Together; the tab and sidebar keep the short Pair label and plugin.id is unchanged so existing installs update in place. Docs prose also drops its em dashes.
check-toolchain.sh flagged four drifts against Code On The Go's on-device toolchain: compileSdk/targetSdk 34 -> 36 and AGP 8.8.2 -> 8.11.0. AGP 8.11.0 needs Gradle >= 8.13, so drop pair's bundled 8.10.2 wrapper and use the repo-root 8.14.3 wrapper (the convention in CLAUDE.md; update-libs.sh already falls back to it when a plugin has no local gradlew). Verified assemblePlugin still produces pair.cgp with the bumped toolchain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.